package com.mac.mapper;

import com.mac.pojo.Articles;
import com.mac.pojo.PageBean;
import com.mac.pojo.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Select;

import java.util.ArrayList;

public interface ArticlesMapper {

    /**
     * 返回所有存在的文章
     * @return 文章集合
     */
    @Select("select * from articles")
    @ResultMap("articleResultMap")
    ArrayList<Articles> selectAllArticles();

    /**
     *  根据作者的id查询
     * @param authorId 作者的id
     * @return 返回文章集合
     */
    @Select("select * from articles where author_id = #{authorId}")
    @ResultMap("articleResultMap")
    ArrayList<Articles> selectAllByAuthorId(@Param("authorId") int authorId);

    /**
     *  根据标题查询单篇文章
     * @param title 文章标题
     * @return 返回文章对象
     */
    @Select("select * from articles where title = #{title}")
    @ResultMap("articleResultMap")
    Articles searchOneByTitle(@Param("title") String title);

    @Select("select * from articles where article_id = #{articleId}")
    @ResultMap("articleResultMap")
    Articles searchOneByArticleId(@Param("articleId") int articleId);


    /**
     *  根据标题模糊查询多篇文章
     * @param title 文章标题
     * @return 返回文章集合
     */
    @Select("select * from artilces where title like #{title}")
    @ResultMap("articleResultMap")
    ArrayList<Articles> searchAllByTitle(@Param("title") String title);



    /**
     *  根据文章状态查询多篇文章
     * @param status 文章状态·
     * @return 返回文章集合
     */
    @Select("select * from articles where status = #{status}")
    @ResultMap("articleResultMap")
    ArrayList<Articles> searchAllByStatus(@Param("status") String status);

    /**
     * 添加文章
     * @param article 文章对象
     */
    boolean addArticle(Articles article);

    /**
     *  根据文章标题删除文章
     * @param title 文章标题
     */
    @Delete("delete from artilces where title = #{title}")
    boolean deleteByTitle(String title);

    /**
     *  修改文章信息
     * @param article 文章对象
     */
    boolean changeArticleInfo(Articles article);












    /**
     * 返回所有用户信息
     *
     * @return 返回ArrayList<User>
     */
    @Select("select * from articles")
    @ResultMap("articleResultMap")
    ArrayList<User> selectAll();

    /**
     * 批量删除
     * @param ids
     */
    boolean deleteByIds(@Param("ids") int[] ids);


    /**
     * 分页查询
     *
     * @param begin 从哪里开始
     * @param size  每次展示几个用户
     * @return 返回 ArrayList<User>
     */
    @Select("select * from  articles limit #{begin} , #{size}")
    @ResultMap("articleResultMap")
    PageBean<User> selectByPage(@Param("begin") int begin, @Param("size") int size);

    /**
     * 查询总记录数
     * @return
     */
    @Select("select count(*) from articles")
    Integer selectTotalCount();

    /**
     * 分页条件查询
     * @param begin
     * @param size
     * @return
     */
    @ResultMap("articleResultMap")
    ArrayList<Articles> selectByPageAndCondition(@Param("begin") int begin,@Param("size") int size,@Param("article") Articles article);

    /**
     * 根据条件查询总记录数
     * @return 总记录数
     */
    Integer selectTotalCountByCondition(@Param("article") Articles article);
}
